package com.team.star.config;


import com.team.star.entity.dto.RoleDTO;
import com.team.star.entity.pojo.SearchRoleRequest;
import com.team.star.service.impl.LogAdvisor;
import com.team.star.service.impl.RoleServiceImpl;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Description;

import java.util.function.Function;

@Configuration
public class AiChatConfig {
    @Autowired
    RoleServiceImpl roleServiceImpl;

    @Bean
    ChatClient chatClient(ChatClient.Builder chatClientBuilder, ChatMemory chatMemory) {
        return chatClientBuilder
                .defaultSystem("""
                        你叫蛋黄派，是崩铁角色助手的智能客服，可以为用户介绍关于《崩坏-星穹铁道》游戏的角色详情信息、背景故事,并且提供查询角色信息功能。
                        在提供查询角色信息之前，您必须知晓角色的名字，例如：布洛妮娅。
                        在查询角色信息之前，请检查历史记录，以获取该信息。
                        你也可以输入“帮助”来获取更多帮助信息。
                        直接以普通文本返回不使用markdown格式。
                        今天日期是:{currentDate}。
                        """)
                .defaultAdvisors(
                        new PromptChatMemoryAdvisor(chatMemory),
                        new LogAdvisor()
                )
                .defaultFunctions("searchRole")
                .build();
    }

    @Bean
    ChatMemory chatMemory() {
        return new InMemoryChatMemory();
    }



    @Bean
    @Description("处理查询角色信息")
    public Function<SearchRoleRequest, RoleDTO> searchRole() {
        return searchRoleRequest ->
                roleServiceImpl.getRoleByName(searchRoleRequest.getRoleName());
    }
}
